package com.chatplus.application.processor.channel.chat.xunfei.dto;

import com.fasterxml.jackson.annotation.JsonProperty;

import java.util.List;

/**
 * 返回参数
 *
 * @author chj
 * @date 2024/1/8
 **/
public class XunFeiResponseDTO {
    @JsonProperty("header")
    private HeaderDTO header;
    @JsonProperty("payload")
    private PayloadDTO payload;

    public HeaderDTO getHeader() {
        return header;
    }

    public void setHeader(HeaderDTO header) {
        this.header = header;
    }

    public PayloadDTO getPayload() {
        return payload;
    }

    public void setPayload(PayloadDTO payload) {
        this.payload = payload;
    }

    public static class HeaderDTO {
        /**
         * 错误码，0表示正常，非0表示出错
         */
        @JsonProperty("code")
        private Integer code;
        /**
         * 会话是否成功的描述信息
         */
        @JsonProperty("message")
        private String message;
        /**
         * 会话的唯一id，用于讯飞技术人员查询服务端会话日志使用,出现调用错误时建议留存该字段
         */
        @JsonProperty("sid")
        private String sid;
        /**
         * 会话状态，取值为[0,1,2]；0代表首次结果；1代表中间结果；2代表最后一个结果
         */
        @JsonProperty("status")
        private Integer status;

        public Integer getCode() {
            return code;
        }

        public void setCode(Integer code) {
            this.code = code;
        }

        public String getMessage() {
            return message;
        }

        public void setMessage(String message) {
            this.message = message;
        }

        public String getSid() {
            return sid;
        }

        public void setSid(String sid) {
            this.sid = sid;
        }

        public Integer getStatus() {
            return status;
        }

        public void setStatus(Integer status) {
            this.status = status;
        }
    }

    public static class PayloadDTO {
        @JsonProperty("choices")
        private ChoicesDTO choices;
        /**
         * 在最后一次结果返回
         */
        @JsonProperty("usage")
        private UsageDTO usage;

        public ChoicesDTO getChoices() {
            return choices;
        }

        public void setChoices(ChoicesDTO choices) {
            this.choices = choices;
        }

        public UsageDTO getUsage() {
            return usage;
        }

        public void setUsage(UsageDTO usage) {
            this.usage = usage;
        }

        public static class ChoicesDTO {
            /**
             * 文本响应状态，取值为[0,1,2]; 0代表首个文本结果；1代表中间文本结果；2代表最后一个文本结果
             */
            @JsonProperty("status")
            private Integer status;
            /**
             * 返回的数据序号，取值为[0,9999999]
             */
            @JsonProperty("seq")
            private Integer seq;
            /**
             * 响应文本
             */
            @JsonProperty("text")
            private List<XunFeiMsgDTO> text;

            public Integer getStatus() {
                return status;
            }

            public void setStatus(Integer status) {
                this.status = status;
            }

            public Integer getSeq() {
                return seq;
            }

            public void setSeq(Integer seq) {
                this.seq = seq;
            }

            public List<XunFeiMsgDTO> getText() {
                return text;
            }

            public void setText(List<XunFeiMsgDTO> text) {
                this.text = text;
            }
        }
        public static class UsageDTO {
            @JsonProperty("text")
            private TextDTO text;

            public TextDTO getText() {
                return text;
            }

            public void setText(TextDTO text) {
                this.text = text;
            }

            public static class TextDTO {

                private TextDTO() {
                }
                /**
                 * 保留字段，可忽略
                 */
                @JsonProperty("question_tokens")
                private Integer questionTokens;
                /**
                 * 包含历史问题的总tokens大小
                 */
                @JsonProperty("prompt_tokens")
                private Integer promptTokens;
                /**
                 * 回答的tokens大小
                 */
                @JsonProperty("completion_tokens")
                private Integer completionTokens;
                /**
                 * prompt_tokens和completion_tokens的和，也是本次交互计费的tokens大小
                 */
                @JsonProperty("total_tokens")
                private Integer totalTokens;

                public Integer getQuestionTokens() {
                    return questionTokens;
                }

                public void setQuestionTokens(Integer questionTokens) {
                    this.questionTokens = questionTokens;
                }

                public Integer getPromptTokens() {
                    return promptTokens;
                }

                public void setPromptTokens(Integer promptTokens) {
                    this.promptTokens = promptTokens;
                }

                public Integer getCompletionTokens() {
                    return completionTokens;
                }

                public void setCompletionTokens(Integer completionTokens) {
                    this.completionTokens = completionTokens;
                }

                public Integer getTotalTokens() {
                    return totalTokens;
                }

                public void setTotalTokens(Integer totalTokens) {
                    this.totalTokens = totalTokens;
                }
            }
        }
    }
}
